コンテナのLog4Shell脆弱性検出にAmazon Inspector/ECR拡張イメージスキャンを使う
ども、ゲストブロガーのtakiponeです。
DockerコンテナでLog4Shellの脆弱性が該当するかどうかを確認するために、Amazon Inspectorのコンテナイメージスキャン機能を使ってみた様子を共有します。
AWSでのLog4Shell対策
AWSでのLog4Shell対策については、以下のAWSブログ記事にまとまっています。
この中の「検知」の項目にAmazon Inspectorがあります。なお、InspectorはDockerコンテナのほかEC2の脆弱性スキャンにも対応しており、非コンテナ環境でも活用できます。
試してみた
Inspectorのコンテナイメージスキャンは、AWSのコンテナリポジトリサービスAmazon ECRで動作します。今回はサンプルとしてElasticsearchの公式イメージを試してみます。Elasticsearch自体のLog4Shell関連情報は以下を参照してください。
公式Dockerイメージは以下のサイトで確認できます。
今回は少し古めのバージョン 7.7.1
と上記サイトでLog4j2の新しいバージョンが入っているとある 7.16.2-amd64
をそれぞれスキャンし、結果を比べてみます。(具体的な手順は記事後方の「参考: 検証手順」を参照ください)
elasticsearch:7.7.1
CVE-2021-44228がCRITICALで検出されました。続いて新しいバージョンのスキャン結果を見ます。
elasticsearch:7.16.2-amd64
お、CVE-2021-44228は検出されず、CRITICALの項目はなしという結果になりました。脆弱性情報は随時更新されますしLog4Shell関連の状況も変化しますので、これで安心というわけではありません。Inspectorには継続スキャン機能があるので、コンテナの日々の運用にイメージスキャンを組み込んでチェックしていくのが良いでしょう。
Amazon ECRの従来のイメージスキャン
ちなみに、Inspectorのコンテナスキャンが有償の一方で、ECRに従来からあるコンテナスキャンは無償で利用できます。無償版でのバージョン7.7.1のスキャン結果を以下に示します。
CVE-2021-44228の検知を期待していたのですが、検知されませんでした。これは従来のスキャンのデータベースがLinuxディストリビューションのソフトウェアパッケージのバージョンを照合するものであり、ソフトウェアに組み込まれたLog4jを直接検証するわけではないからなのかなと思いました。スキャン内容の差異については、InspectorのFAQ、「Q: Amazon ECR 用の Amazon Inspector コンテナイメージスキャンサービスは、Amazon ECR Clair ベースのソリューションとどのように異なりますか?」が詳しいです。
検出データベースに興味のある方は、DevIOの先人の記事が参考になるかもしれません。
参考: 検証手順
まずはECRの管理画面で拡張スキャンを有効にします。
続いてECRリポジトリを作成し、プッシュ時のスキャンを有効にします。
手元のPCにDockerイメージをダウンロード(pull)し、作成したECRリポジトリにアップロード(push)します。
# Dockerイメージのダウンロード docker pull docker.elastic.co/elasticsearch/elasticsearch:7.7.1 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.16.2-amd64 # DockerイメージにECRリポジトリのタグを付与 docker tag docker.elastic.co/elasticsearch/elasticsearch:7.7.1 XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/elasticsearch:7.7.1 docker tag docker.elastic.co/elasticsearch/elasticsearch:7.16.2-amd64 XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/elasticsearch2:7.16.2-amd64 # ECRの一時クレデンシャルをDocker CLIにセットしてアップロード aws ecr get-login-password | docker login --username AWS --password-stdin XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/elasticsearch2:7.7.1 docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/elasticsearch2:7.16.2-amd64
これでスキャンが実行されます。
まとめ
Amazon InspectorのコンテナイメージスキャンでDockerコンテナのLog4Shell脆弱性チェックを試してみました。ECR自体はAmazon ECSやEKS用途に限ったものではありませんので、ローカルの開発環境やオンプレミス環境でDockerを利用する場合でも活用できそうですね。